"""
3201. 找出有效子序列的最大长度 I
已解答
中等
相关标签
premium lock icon
相关企业
提示
给你一个整数数组 nums。

nums 的子序列 sub 的长度为 x ，如果其满足以下条件，则称其为 有效子序列：

(sub[0] + sub[1]) % 2 == (sub[1] + sub[2]) % 2 == ... == (sub[x - 2] + sub[x - 1]) % 2
返回 nums 的 最长的有效子序列 的长度。

一个 子序列 指的是从原数组中删除一些元素（也可以不删除任何元素），剩余元素保持原来顺序组成的新数组。



示例 1：

输入： nums = [1,2,3,4]

输出： 4

解释：

最长的有效子序列是 [1, 2, 3, 4]。

示例 2：

输入： nums = [1,2,1,1,2,1,2]

输出： 6

解释：

最长的有效子序列是 [1, 2, 1, 2, 1, 2]。

示例 3：

输入： nums = [1,3]

输出： 2

解释：

最长的有效子序列是 [1, 3]。



提示：

2 <= nums.length <= 2 * 105
1 <= nums[i] <= 107
"""


class Solution(object):
    def maximumLength(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        #思路：四种情况，全奇数，全偶数，奇数偶数，偶数奇数
        ji = 0
        ou = 0
        time = 0 #奇偶奇 为什么不需要单独考虑偶奇偶?他们的区别就是第一位，计算完毕后，如果第一位是偶数，那么偶奇偶更好，+1即可
        for i in nums:
            if i % 2 == 1:
                ji += 1
            else:
                ou += 1
            #奇偶
            if time %2 == 0: #奇数
                if i % 2 == 1:
                    time += 1
            else: #偶
                if i % 2 == 0:
                    time += 1
        #计算完毕后，如果第一位是偶数，那么偶奇偶更好，+1即可
        if nums[0]%2 == 0:
            time+=1
        return max(ji,ou,time)

if __name__ == '__main__':
    print(Solution().maximumLength([1,2,3,4]))
    print(Solution().maximumLength([1,2,1,1,2,1,2]))
